package com.test.learnkotlin.generics

fun main() {
    val aUser = AUser()
    aUser.printAnimalInfo()

    val bUser = BUser()
    bUser.printAnimalInfo()

    val cUser = CUser()
    cUser.printAnimalInfo()// 会报错
    /*
        问题分析：
        CUser 继承 AUser ， 没有传泛型 ， 调用 printAnimalInfo 方法是报异常

        Exception in thread "main" java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
        at com.test.learnkotlin.generics.BaseUser$mAnimal$2.invoke(BaseUser.kt:9)
        at com.test.learnkotlin.generics.BaseUser$mAnimal$2.invoke(BaseUser.kt:7)
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
        at com.test.learnkotlin.generics.BaseUser.getMAnimal(BaseUser.kt:7)
        at com.test.learnkotlin.generics.AUser.<init>(AUser.kt:6)
        at com.test.learnkotlin.generics.CUser.<init>(CUser.kt:3)
        at com.test.learnkotlin.generics.TestGenericsKt.main(TestGenerics.kt:10)
        at com.test.learnkotlin.generics.TestGenericsKt.main(TestGenerics.kt)


        解决方法一：

        CUser类里重写 mAnimal ，并且初始化 Dog

        总结： 子类继承父类，父类的父类有泛型参数，父类传泛型参数了，子类没有传泛型参数，getClass().getGenericSuperclass() 直接返回子类的父类，所以不是 ParameterizedType 类型

        查看 getGenericSuperclass 源码

        查看 ParameterizedType，从当前的类查看参数化类型






     */
}